'''
装饰器装饰通用性最终版  有返回值情况
一旦方法上有装饰器  那么它执行的是inner
'''


def wrapper(fn):
    def inner(*args, **kwargs):  # 任意参数都能接受 ("admin":"123546")  ("大佬")
        print("这里是被装饰函数执行之前")
        ret = fn(*args, **kwargs)
        print("被装饰函数执行之后")
        return ret
    return inner


@wrapper
def dnf(username, password):
    return f"登录账号为{username}，{password},玩DNF"


@wrapper
def timi(wx):
    return f"使用账号{wx}， 登录王者"


print(dnf("admin", "123456"))  # 这里执行的是inner  inner没有参数+
print(timi("鬼谷子"))




'''
有参数的装饰器
'''
def gua_outer(name):
    def gua(fn):
        def inner(*args, **kwargs):  # 任意参数都能接受 ("admin":"123546")  ("大佬")
            print(f"开启{name}外挂")
            ret = fn(*args, **kwargs)
            print("关闭外挂")
            return ret
        return inner
    return gua


@gua_outer("饕餮")
def timi():
    print("我要杀遍全场")

timi()